/**
 * 
 */
package fr.gfi.agraf.vue.action.administrer.utilisateur;

import java.util.List;

import org.apache.log4j.Logger;

import fr.gfi.agraf.exception.AgrafException;
import fr.gfi.agraf.service.IUtilisateurService;
import fr.gfi.agraf.utils.PropertiesUtils;
import fr.gfi.agraf.utils.SpringFactory;
import fr.gfi.agraf.vue.action.AbstractApplicationSupportAction;
import fr.gfi.agraf.vue.action.login.LoginAction;
import fr.gfi.agraf.vue.bean.UtilisateurDTO;

/**
 * @author Zakaria Classe abstraite qui récupere la liste des utilisateurs
 */
public abstract class AbstractVoirUtilisateurAction extends AbstractApplicationSupportAction {

	/**
	 * Généré par java
	 */
	private static final long serialVersionUID = 4428210936045458602L;
	private List<UtilisateurDTO> utilisateurList;

	private List<String> listeInfoPage;

	/**
	 * Logger
	 */
	private final static Logger LOGGER = Logger.getLogger(VoirAdministrerUtilisateurAction.class);

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * fr.gfi.agraf.vue.action.AbstractApplicationSupportAction#executeAction()
	 */
	@Override
	public String executeAction() throws Exception {
		// Spring, recupere le service utilisateur
		final IUtilisateurService utilisateurService = (IUtilisateurService) SpringFactory
				.getApplicationContext().getBean(LoginAction.UTILISATEUR_SERVICE);

		try {
			// fait appel au service utilisateur
			setUtilisateurList(utilisateurService.getAllUtilisateurActif());
		} catch (final AgrafException ae) {
			// Recupére le message d'erreur
			final String messageErreur = PropertiesUtils.getProperty(ae.getKey());
			// Ajoute action error
			addActionError(messageErreur);
			LOGGER.error(messageErreur, ae);
			return ERROR;
		}
		setMessagePopupAide();
		return SUCCESS;
	}

	/**
	 * Permet de setter des messages si besoin
	 */
	public abstract void setMessagePopupAide();

	/**
	 * @return the utilisateurList
	 */
	public List<UtilisateurDTO> getUtilisateurList() {
		return utilisateurList;
	}

	/**
	 * @param utilisateurList
	 *            the utilisateurList to set
	 */
	public void setUtilisateurList(final List<UtilisateurDTO> utilisateurList) {
		this.utilisateurList = utilisateurList;
	}

	/**
	 * @return the listeInfoPage
	 */
	public List<String> getListeInfoPage() {
		return listeInfoPage;
	}

	/**
	 * @param listeInfoPage
	 *            the listeInfoPage to set
	 */
	public void setListeInfoPage(final List<String> listeInfoPage) {
		this.listeInfoPage = listeInfoPage;
	}
}
